from opencv.highgui import *
from opencv.cv import *
from opencv import *
from difference import *


# Creamos una captura a partir de un video
# captura = cvCreateFileCapture( "video2.flv" )

# Creamos una captura a partir de la webcam
#TODO aqui tenemos que dar a elegir al usuario que webcam quiere usar

captura = cvCreateCameraCapture(0)

photos = []
count = 0

while 1:
    # capturamos un frame de la captura
    frame = cvQueryFrame(captura)
    if ( not frame ): 
        break
    # Creamos una ventana donde mostramos el frame
    cvShowImage( "CAM", frame )
    keystroke = cvWaitKey(30)    # Esperamos pulsacion de tecla
    if keystroke == "f":    # si pulsamos f guardamos foto
        #TODO, cambiar a escala de grises
        save = cvCreateMat(frame.rows, frame.cols, frame.type)
        save.imageData = frame.imageData
        photos.append(save)
        count += 1
    if (keystroke == "e"):  # si pulsamos e salimos
        break
    # Update de la captura y destruccion de la ventana
	cvReleaseCapture( captura )
	cvDestroyWindow( "CAM" )


# pasamos a tratar las fotos que hemos sacado
# la primera foto es tablero vacio
# se termina cuando dos fotos consecutivas no tengan cambio
# En la lista resultados guardaremos la diferencia entre fotos
resultados = []
for im in range(0,len(photos)-1):
    #cvAbsDiff(photos[im], photos[im+1], frame)
    #save = cvCreateMat(frame.rows, frame.cols, frame.type)
    #save.imageData = frame.imageData
    #resultados.append(save)
    resultados.append(difference(photos[im], photos[im+1]))
    
# Vamos a ver las fotazas que hemos sacado de diferencia
for r in resultados:
    #TODO buscar los circulitos
    # las diferencias hay que buscar los circulos
    #storage = cvCreateMemStorage(0)
    #gray = r
    #circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 1, gray.width/19, 200, 100)
    #print len(circles)
    #for circle in circles:
    #    opencv.cvDrawCircle(r, circle.point, 10, opencv.CvScalar())
    cvShowImage( "RES", r )
    cvWaitKey(0)

